﻿<?xml version="1.0" encoding="utf-8" ?>

<cls:class
	name="PciDevice"
	type="http://metalx.org/Pci/PciDevice"
	xmlns="http://metalx.org/Program"
	xmlns:cls="http://metalx.org/Class"
	xmlns:obj="http://metalx.org/i386/Functions/Object"
	xmlns:int="http://metalx.org/i386/Functions/Integer"
	xmlns:hex="http://metalx.org/i386/Functions/Hexadecimal"
	xmlns:lst="http://metalx.org/i386/Functions/List"
	xmlns:str="http://metalx.org/i386/Functions/String"
	xmlns:mm="http://metalx.org/i386/Functions/MemoryManager"
	xmlns:clsf="http://metalx.org/i386/Functions/Class"
	xmlns:pcif="http://metalx.org/i386/Functions/Pci"
	xmlns:var="http://metalx.org/Variable"
	xmlns:enum="http://metalx.org/Enumeration"
	xmlns:sys="http://metalx.org/i386/Functions/System"
	xmlns:cat="http://metalx.org/i386/Functions/Catalog"
	xmlns:asc="http://metalx.org/Ansi/Ascii"
	xmlns:pci="http://metalx.org/Pc/Pci/Ports"
	xmlns:cfg="http://metalx.org/Pc/Pci/Configuration"
	xmlns:ari="http://metalx.org/Intel/80386/Arithmetic"
	xmlns:math="http://metalx.org/Intel/80386/Math"
	xmlns:shift="http://metalx.org/Intel/80386/Shift"
	xmlns:cpu="http://metalx.org/Intel/80386/Operators"
	xmlns:op="http://metalx.org/Intel/80386/Operands">

	<cls:field name="Slot" type="http://metalx.org/Pci/PciSlot" offset="0"/>

	<cls:method name="GetBaseAddress0" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetBaseAddress0/>

		<cpu:TestALWithImmediate/>
		<binary>00000001</binary>

		<cpu:BranchToRelative8IfZero/>
		<addressOf ref="memory0" type="Relative8"/>

		<cpu:AndALWithImmediate/>
		<binary>11111100</binary>

		<cpu:JumpToRelative8/>
		<addressOf ref="createObject0" type="Relative8"/>

		<label id="memory0"/>

		<cpu:AndALWithImmediate/>
		<binary>11110000</binary>

		<label id="createObject0"/>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetBaseAddress1" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetBaseAddress1/>

		<cpu:TestALWithImmediate/>
		<binary>00000001</binary>

		<cpu:BranchToRelative8IfZero/>
		<addressOf ref="memory1" type="Relative8"/>

		<cpu:AndALWithImmediate/>
		<binary>11111100</binary>

		<cpu:JumpToRelative8/>
		<addressOf ref="createObject1" type="Relative8"/>

		<label id="memory1"/>

		<cpu:AndALWithImmediate/>
		<binary>11110000</binary>

		<label id="createObject1"/>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetBaseAddress2" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetBaseAddress2/>

		<cpu:TestALWithImmediate/>
		<binary>00000001</binary>

		<cpu:BranchToRelative8IfZero/>
		<addressOf ref="memory2" type="Relative8"/>

		<cpu:AndALWithImmediate/>
		<binary>11111100</binary>

		<cpu:JumpToRelative8/>
		<addressOf ref="createObject2" type="Relative8"/>

		<label id="memory2"/>

		<cpu:AndALWithImmediate/>
		<binary>11110000</binary>

		<label id="createObject2"/>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetBaseAddress3" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetBaseAddress3/>

		<cpu:TestALWithImmediate/>
		<binary>00000001</binary>

		<cpu:BranchToRelative8IfZero/>
		<addressOf ref="memory3" type="Relative8"/>

		<cpu:AndALWithImmediate/>
		<binary>11111100</binary>

		<cpu:JumpToRelative8/>
		<addressOf ref="createObject3" type="Relative8"/>

		<label id="memory3"/>

		<cpu:AndALWithImmediate/>
		<binary>11110000</binary>

		<label id="createObject3"/>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetBaseAddress4" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetBaseAddress4/>

		<cpu:TestALWithImmediate/>
		<binary>00000001</binary>

		<cpu:BranchToRelative8IfZero/>
		<addressOf ref="memory4" type="Relative8"/>

		<cpu:AndALWithImmediate/>
		<binary>11111100</binary>

		<cpu:JumpToRelative8/>
		<addressOf ref="createObject4" type="Relative8"/>

		<label id="memory4"/>

		<cpu:AndALWithImmediate/>
		<binary>11110000</binary>

		<label id="createObject4"/>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetBaseAddress5" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetBaseAddress5/>

		<cpu:TestALWithImmediate/>
		<binary>00000001</binary>

		<cpu:BranchToRelative8IfZero/>
		<addressOf ref="memory5" type="Relative8"/>

		<cpu:AndALWithImmediate/>
		<binary>11111100</binary>

		<cpu:JumpToRelative8/>
		<addressOf ref="createObject5" type="Relative8"/>

		<label id="memory5"/>

		<cpu:AndALWithImmediate/>
		<binary>11110000</binary>

		<label id="createObject5"/>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetDeviceID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetDeviceID/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>16</byte>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetVendorID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetDeviceID/>

		<cpu:AndAXWithImmediate/>
		<hex>0000ffff</hex>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetSubsystemID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetSubsystemID/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>16</byte>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetSubsystemVendorID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetSubsystemID/>

		<cpu:AndAXWithImmediate/>
		<hex>0000ffff</hex>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetClassID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetClassCode/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>24</byte>

		<cpu:AndAXWithImmediate/>
		<hex>000000ff</hex>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetSubclassID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetClassCode/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>16</byte>

		<cpu:AndAXWithImmediate/>
		<hex>000000ff</hex>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetInterfaceID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetClassCode/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>8</byte>

		<cpu:AndAXWithImmediate/>
		<hex>000000ff</hex>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetRevisionID" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetClassCode/>

		<cpu:AndAXWithImmediate/>
		<hex>000000ff</hex>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetCommand" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetCommandStatus/>

		<cpu:AndAXWithImmediate/>
		<hex>0000ffff</hex>
		
		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetStatus" type="http://metalx.org/Hexadecimal">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetCommandStatus/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>16</byte>

		<hex:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetInterruptLine" type="http://metalx.org/Integer">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetInterruptLine/>

		<cpu:AndAXWithImmediate/>
		<hex>000000ff</hex>

		<int:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetType" type="http://metalx.org/String">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetClassCode/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>8</byte>

		<cpu:CopyImmediateToDI/>
		<addressOf ref="classTable" type="Absolute32"/>

		<cpu:CopyImmediateToCX/>
		<int>49</int>

		<label id="forEachRow"/>

		<cpu:CompareRegisterToOperand/>
		<op:AX-DIAddress/>

		<cpu:BranchToRelative8IfEqual/>
		<addressOf ref="createObject" type="Relative8"/>

		<cpu:MathImmediate8ToOperandFunction/>
		<math:AddToDIRegister/>
		<byte>8</byte>

		<cpu:LoopToRelative8/>
		<addressOf ref="forEachRow" type="Relative8"/>

		<label id="createObject"/>

		<cpu:CopyOperandToRegister/>
		<op:DI-DIAddressPlusImmediate8/>
		<byte>4</byte>

		<str:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="GetClass" type="http://metalx.org/Class">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetType/>

		<cpu:CopyRegisterToOperand/>
		<op:SI-DIRegister/>

		<clsf:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<cls:method name="ToString" type="http://metalx.org/String">
		<cpu:CopyRegisterToOperand/>
		<op:DI-SIRegister/>

		<obj:GetData/>

		<cpu:CopyOperandToRegister/>
		<op:AX-SIAddress/>

		<pcif:GetClassCode/>

		<cpu:ShiftRegisterByImmediate8Function/>
		<shift:ShiftAXRegisterRight/>
		<byte>8</byte>

		<cpu:CopyImmediateToDI/>
		<addressOf ref="classTable" type="Absolute32"/>

		<cpu:CopyImmediateToCX/>
		<int>49</int>

		<label id="forEachRow"/>

		<cpu:CompareRegisterToOperand/>
		<op:AX-DIAddress/>

		<cpu:BranchToRelative8IfEqual/>
		<addressOf ref="createObject" type="Relative8"/>

		<cpu:MathImmediate8ToOperandFunction/>
		<math:AddToDIRegister/>
		<byte>8</byte>

		<cpu:LoopToRelative8/>
		<addressOf ref="forEachRow" type="Relative8"/>

		<label id="createObject"/>

		<cpu:CopyOperandToRegister/>
		<op:DI-DIAddressPlusImmediate8/>
		<byte>4</byte>

		<str:CreateObject/>

		<cpu:ReturnToNearCaller/>
	</cls:method>

	<label id="classTable"/>

	<!--VGA Compatible Device-->
	<hex>00000100</hex>
	<addressOf ref="VgaCompatibleDevice" type="Absolute32"/>

	<!--SCSI Bus Controller-->
	<hex>00010000</hex>
	<addressOf ref="ScsiBusController" type="Absolute32"/>

	<hex>00010601</hex>
	<addressOf ref="AhciBusController" type="Absolute32"/>

	<!--IDE Controller-->
	<hex>00010100</hex>
	<addressOf ref="IdeController" type="Absolute32"/>

	<hex>00010180</hex>
	<addressOf ref="IdeController" type="Absolute32"/>
	
	<hex>0001018A</hex>
	<addressOf ref="IdeController" type="Absolute32"/>

	<!--Floppy Disk Controller-->
	<hex>00010200</hex>
	<addressOf ref="FloppyDiskController" type="Absolute32"/>

	<!--ATA Controller-->
	<hex>00010500</hex>
	<addressOf ref="AtaController" type="Absolute32"/>

	<!--Serial ATA Port-->
	<hex>00010600</hex>
	<addressOf ref="SerialAtaPort" type="Absolute32"/>

	<!--Mass Storage Controller-->
	<hex>00010800</hex>
	<addressOf ref="MassStorageController" type="Absolute32"/>

	<!--Ethernet Controller-->
	<hex>00020000</hex>
	<addressOf ref="EthernetController" type="Absolute32"/>

	<!--VGA Compatible Controller-->
	<hex>00030000</hex>
	<addressOf ref="VgaCompatibleController" type="Absolute32"/>

	<!--Multimedia Controller-->
	<hex>00040000</hex>
	<addressOf ref="MultimediaVideoController" type="Absolute32"/>

	<hex>00040100</hex>
	<addressOf ref="MultimediaAudioController" type="Absolute32"/>

	<hex>00040200</hex>
	<addressOf ref="ComputerTelephonyDevice" type="Absolute32"/>

	<hex>00040300</hex>
	<addressOf ref="AudioDevice" type="Absolute32"/>

	<!--Host Bridge-->
	<hex>00060000</hex>
	<addressOf ref="HostBridge" type="Absolute32"/>

	<!--ISA Bridge-->
	<hex>00060100</hex>
	<addressOf ref="IsaBridge" type="Absolute32"/>

	<!--EISA Bridge-->
	<hex>00060200</hex>
	<addressOf ref="EisaBridge" type="Absolute32"/>

	<!--PCI Bridge-->
	<hex>00060400</hex>
	<addressOf ref="PciBridge" type="Absolute32"/>

	<hex>00060401</hex>
	<addressOf ref="PciBridge" type="Absolute32"/>

	<!--PCMCIA Bridge-->
	<hex>00060500</hex>
	<addressOf ref="PcmciaBridge" type="Absolute32"/>

	<!--CardBus Bridge-->
	<hex>00060700</hex>
	<addressOf ref="CardBusBridge" type="Absolute32"/>

	<!--Serial Controller-->
	<hex>00070000</hex>
	<addressOf ref="SerialController" type="Absolute32"/>

	<!--Parallel Port-->
	<hex>00070100</hex>
	<addressOf ref="ParallelPort" type="Absolute32"/>

	<!--Interrupt Controller-->
	<hex>00080000</hex>
	<addressOf ref="InterruptController" type="Absolute32"/>

	<!--ISA Interrupt Controller-->
	<hex>00080001</hex>
	<addressOf ref="IsaInterruptController" type="Absolute32"/>

	<!--EISA Interrupt Controller-->
	<hex>00080002</hex>
	<addressOf ref="EisaInterruptController" type="Absolute32"/>

	<!--I/O APIC Controller-->
	<hex>00080010</hex>
	<addressOf ref="IoApicController" type="Absolute32"/>

	<!--DMA Controller-->
	<hex>00080100</hex>
	<addressOf ref="DmaController" type="Absolute32"/>

	<!--ISA DMA Controller-->
	<hex>00080101</hex>
	<addressOf ref="IsaDmaController" type="Absolute32"/>

	<!--EISA DMA Controller-->
	<hex>00080102</hex>
	<addressOf ref="EisaDmaController" type="Absolute32"/>

	<!--System Timer-->
	<hex>00080200</hex>
	<addressOf ref="SystemTimer" type="Absolute32"/>

	<!--ISA System Timer-->
	<hex>00080201</hex>
	<addressOf ref="IsaSystemTimer" type="Absolute32"/>

	<!--EISA System Timer-->
	<hex>00080202</hex>
	<addressOf ref="EisaSystemTimer" type="Absolute32"/>

	<!--Real Time Clock Controller-->
	<hex>00080300</hex>
	<addressOf ref="RealTimeClockController" type="Absolute32"/>

	<!--ISA Real Time Clock Controller-->
	<hex>00080301</hex>
	<addressOf ref="IsaRealTimeClockController" type="Absolute32"/>

	<!--Keyboard Controller-->
	<hex>00090000</hex>
	<addressOf ref="KeyboardController" type="Absolute32"/>

	<!--Mouse Controller-->
	<hex>00090200</hex>
	<addressOf ref="MouseController" type="Absolute32"/>

	<!--Firewire Controller-->
	<hex>000c0000</hex>
	<addressOf ref="FirewireController" type="Absolute32"/>

	<!--USB 1.0 Controller (UHCI)-->
	<hex>000c0300</hex>
	<addressOf ref="UhciController" type="Absolute32"/>

	<!--USB 1.0 Controller (OHCI)-->
	<hex>000c0310</hex>
	<addressOf ref="OhciController" type="Absolute32"/>

	<!--USB 2.0 Controller-->
	<hex>000c0320</hex>
	<addressOf ref="EhciController" type="Absolute32"/>

	<!--USB 3.0 Controller-->
	<hex>000c0330</hex>
	<addressOf ref="XhciController" type="Absolute32"/>

	<!--Wireless Ethernet Controller (802.11a)-->
	<hex>000d2000</hex>
	<addressOf ref="WirelessEthernetControllerA" type="Absolute32"/>

	<!--Wireless Ethernet Controller (802.11b)-->
	<hex>000d2100</hex>
	<addressOf ref="WirelessEthernetControllerB" type="Absolute32"/>

	<!--Co-Processor-->
	<hex>000b4000</hex>
	<addressOf ref="Coprocessor" type="Absolute32"/>

	<!--System Management Bus-->
	<hex>000c0500</hex>
	<addressOf ref="SmBus" type="Absolute32"/>

	<!--Memory Controller-->
	<hex>00050000</hex>
	<addressOf ref="MemoryController" type="Absolute32"/>

	<!--Unknown Device-->
	<hex>00000000</hex>
	<addressOf ref="UnknownDevice" type="Absolute32"/>

	<var:string id="VgaCompatibleDevice">VGA Compatible Device</var:string>
	<var:string id="ScsiBusController">SCSI Bus Controller</var:string>
	<var:string id="AhciBusController">AHCI Bus Controller</var:string>
	<var:string id="IdeController">IDE Controller</var:string>
	<var:string id="FloppyDiskController">Floppy Disk Controller</var:string>
	<var:string id="AtaController">ATA Controller</var:string>
	<var:string id="SerialAtaPort">Serial ATA Port</var:string>
	<var:string id="MassStorageController">Mass Storage Controller</var:string>
	<var:string id="EthernetController">Ethernet Controller</var:string>
	<var:string id="VgaCompatibleController">VGA Compatible Controller</var:string>
	<var:string id="MultimediaVideoController">Multimedia Video Controller</var:string>
	<var:string id="MultimediaAudioController">Multimedia Audio Controller</var:string>
	<var:string id="ComputerTelephonyDevice">Computer Telephony Device</var:string>
	<var:string id="AudioDevice">Audio Device</var:string>
	<var:string id="HostBridge">Host Bridge</var:string>
	<var:string id="IsaBridge">ISA Bridge</var:string>
	<var:string id="EisaBridge">EISA Bridge</var:string>
	<var:string id="PciBridge">PCI-to-PCI Bridge</var:string>
	<var:string id="PcmciaBridge">PCMCIA Bridge</var:string>
	<var:string id="CardBusBridge">CardBus Bridge</var:string>
	<var:string id="SerialController">Serial Port Controller</var:string>
	<var:string id="ParallelPort">Parallel Port</var:string>
	<var:string id="InterruptController">Programmable Interrupt Controller</var:string>
	<var:string id="IsaInterruptController">ISA Programmable Interrupt Controller</var:string>
	<var:string id="EisaInterruptController">EISA Programmable Interrupt Controller</var:string>
	<var:string id="IoApicController">I/O Advanced Programmable Interrupt Controller</var:string>
	<var:string id="DmaController">Direct Memory Access Controller</var:string>
	<var:string id="IsaDmaController">ISA Direct Memory Access Controller</var:string>
	<var:string id="EisaDmaController">EISA Direct Memory Access Controller</var:string>
	<var:string id="SystemTimer">System Timer</var:string>
	<var:string id="IsaSystemTimer">ISA System Timer</var:string>
	<var:string id="EisaSystemTimer">EISA System Timer</var:string>
	<var:string id="RealTimeClockController">Real Time Clock Controller</var:string>
	<var:string id="IsaRealTimeClockController">ISA Real Time Clock Controller</var:string>
	<var:string id="KeyboardController">Keyboard Controller</var:string>
	<var:string id="MouseController">Mouse Controller</var:string>
	<var:string id="FirewireController">Firewire Controller</var:string>
	<var:string id="UhciController">Universal Serial Bus 1.0 Controller (UHCI)</var:string>
	<var:string id="OhciController">Universal Serial Bus 1.0 Controller (OHCI)</var:string>
	<var:string id="EhciController">Universal Serial Bus 2.0 Controller</var:string>
	<var:string id="XhciController">Universal Serial Bus 3.0 Controller</var:string>
	<var:string id="WirelessEthernetControllerA">Wireless Ethernet Controller (802.11a)</var:string>
	<var:string id="WirelessEthernetControllerB">Wireless Ethernet Controller (802.11b)</var:string>
	<var:string id="Coprocessor">Coprocessor</var:string>
	<var:string id="SmBus">System Management Bus</var:string>
	<var:string id="MemoryController">Memory Controller</var:string>
	<var:string id="UnknownDevice">Unknown Device</var:string>
</cls:class>